package com.gameley.dmgtpf.kernel.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gameley.dmgtpf.common.exception.MyRuntimeException;
import com.gameley.dmgtpf.common.utils.LoggerUtil;
import com.gameley.dmgtpf.common.utils.PubEnvUtil;
import com.gameley.dmgtpf.common.utils.StreamUtil;
import com.gameley.dmgtpf.kernel.dao.RegionDao;
import com.gameley.dmgtpf.kernel.entity.RegionEntity;
import com.gameley.dmgtpf.kernel.service.RegionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service("regionService")
public class RegionServiceImpl extends ServiceImpl<RegionDao, RegionEntity> implements RegionService
{
    @Autowired
    RegionDao regionDao;
    
    private List handleRest(List<RegionEntity> entitys)
    {
        List<HashMap<String, Object>> restList = new ArrayList<HashMap<String, Object>>();
        for (int i = 0; i < PubEnvUtil.getSize(entitys); i++)
        {
            RegionEntity entity = entitys.get(i);
            HashMap<String, Object> restMap = new HashMap<>();
            restMap.put("id", entity.getId());
            restMap.put("name", entity.getName());
            restMap.put("pid", entity.getPid());
            restMap.put("mername", entity.getMername());
            restList.add(restMap);
            // restList.add(new HashMap<String, Object>()
            // {
            // /**
            // * @date 2021年7月29日<BR>
            // * @version 1.0 <br>
            // */
            // private static final long serialVersionUID = -7764335224011799548L;
            // {
            // put("id", regionEntity.getId());
            // put("name", regionEntity.getName());
            // }
            // });
        }
        // String json = new Gson().toJson(restList, List.class);
        return restList;
    }
    
    @Override
    public List getProvinceList()
    {
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("level", 1);
        
        List<RegionEntity> entities = listByMap(columnMap);
        
        return handleRest(entities);
    }
    
    @Override
    public List getCityList(String tags[], String provinceIds[])
    {
        QueryWrapper<RegionEntity> wrapper = new QueryWrapper<RegionEntity>();
        wrapper.eq("level", 2);
        if (PubEnvUtil.getSize(tags) > 0)
        {
            wrapper.in("oldcitytags", tags);
        }
        if (PubEnvUtil.getSize(provinceIds) > 0)
        {
            wrapper.in("pid", provinceIds);
        }
        wrapper.orderByAsc("id");
        
        List<RegionEntity> regionEntities = list(wrapper);
        return handleRest(regionEntities);
    }
    
    @Override
    public String file2tableSavaDB(MultipartFile file)
    {
        try
        {
            if (PubEnvUtil.isEmptyObj(file))
            {
                throw new MyRuntimeException("操作失败，文件不能为空！");
            }
            String str = StreamUtil.InputStreamTOString(file.getInputStream());
            if (PubEnvUtil.isEmpty(str))
            {
                throw new MyRuntimeException("操作失败，文件内容不能为空！");
            }
            String[] crleStr = str.split(PubEnvUtil.CRLF);
            
            // 更新城市标签
            // for (int i = 0; i < PubEnvUtil.getSize(crleStr); i++)
            // {
            // String[] atStr = crleStr[i].split(PubEnvUtil.AT);
            // String[] split = atStr[1].split("、");
            // String inSubSQL = SQLHelper.joinToInSql(split, 1000);
            // regionDao.updateSQL("UPDATE tb_region set citytags = '" + atStr[0] + "' ", " level='2'AND name
            // in(" + inSubSQL + ")");
            // }
            // regionDao.updateSQL("UPDATE tb_region set citytags = '1' ", " level='2'AND name in(" + inSubSQL
            // + ")");
            
            // 更新旧的城市标签
            // String inSubSQL = SQLHelper.joinToInSql(crleStr, 1000);
            // regionDao.updateSQL("UPDATE tb_region set oldcitytags =
            // '"+file.getResource().getFilename().substring(0,1)+"' ", " level='2'AND sname in(" + inSubSQL +
            // ")");
            
        }
        catch (Exception e)
        {
            LoggerUtil.getInstance().exception(e);
            System.err.println(e);
        }
        
        return PubEnvUtil.getSuccessMsg("操作成功！！");
    }
}
